; / integerLiteral const < false true ) int if && : != >= = > goto while } new % void - id || utype doubleLiteral == operator double vardef { + bool return [ <= ] -> stringLiteral struct * , ( . 
StatementList Statement LogicalAndExpression Type AdditiveExpression CommaExpression IterationStatement PrimaryExpression ParenExpression Root StructDef AssignmentExpression RelationalExpression ArgumentsList CommaExpression1 StatementList1 ConstVarStatement LogicalOrExpression EqualityExpression MultiplicativeExpression Constant SelectionStatement CompoundStatement OperatorDef ConditionalExpression PostfixExpression Function JumpStatement AssignmentExpression1 Label VarDefStatement S1 
StatementList Statement StatementList | Statement 
Statement CompoundStatement | SelectionStatement | JumpStatement ; | CommaExpression ; | ConstVarStatement ; | IterationStatement | Label CompoundStatement | Label SelectionStatement | Label IterationStatement 
LogicalAndExpression EqualityExpression | LogicalAndExpression && EqualityExpression 
Type int | double | bool | utype | void 
AdditiveExpression MultiplicativeExpression | AdditiveExpression + MultiplicativeExpression | AdditiveExpression - MultiplicativeExpression 
CommaExpression AssignmentExpression | CommaExpression , AssignmentExpression 
IterationStatement while ParenExpression CompoundStatement 
PrimaryExpression id | Constant | ParenExpression 
ParenExpression ( CommaExpression1 ) 
Root StructDef Root | Function Root | OperatorDef Root | StructDef | Function | OperatorDef 
StructDef struct utype { StatementList1 } ; | struct utype { } ; 
AssignmentExpression ConditionalExpression | PostfixExpression = AssignmentExpression | new Type ; 
RelationalExpression AdditiveExpression | RelationalExpression < AdditiveExpression | RelationalExpression > AdditiveExpression 
ArgumentsList ArgumentsList , vardef | vardef 
CommaExpression1 CommaExpression 
StatementList1 StatementList 
ConstVarStatement VarDefStatement | const VarDefStatement 
LogicalOrExpression LogicalAndExpression | LogicalOrExpression || LogicalAndExpression 
EqualityExpression RelationalExpression | EqualityExpression == RelationalExpression | EqualityExpression != RelationalExpression 
MultiplicativeExpression PostfixExpression | MultiplicativeExpression * PostfixExpression | MultiplicativeExpression / PostfixExpression | MultiplicativeExpression % PostfixExpression 
Constant integerLiteral | doubleLiteral | stringLiteral | true | false 
SelectionStatement if ParenExpression CompoundStatement 
CompoundStatement { StatementList1 } | { } 
OperatorDef Type operator = ( ArgumentsList ) CompoundStatement | Type operator + ( ArgumentsList ) CompoundStatement | Type operator - ( ArgumentsList ) CompoundStatement | Type operator * ( ArgumentsList ) CompoundStatement | Type operator / ( ArgumentsList ) CompoundStatement | Type operator == ( ArgumentsList ) CompoundStatement | Type operator != ( ArgumentsList ) CompoundStatement | Type operator >= ( ArgumentsList ) CompoundStatement | Type operator <= ( ArgumentsList ) CompoundStatement | Type operator > ( ArgumentsList ) CompoundStatement | Type operator < ( ArgumentsList ) CompoundStatement 
ConditionalExpression LogicalOrExpression 
PostfixExpression PrimaryExpression | PostfixExpression [ CommaExpression ] | PostfixExpression ParenExpression | PostfixExpression . id | PostfixExpression -> id 
Function vardef ( ArgumentsList ) CompoundStatement | vardef ( ) CompoundStatement 
JumpStatement return | return AssignmentExpression1 | goto 
AssignmentExpression1 AssignmentExpression 
Label id : 
VarDefStatement vardef 
S1 epsilon | Root 
